package cn.sibu.myapplication.installapk;

import android.util.Log;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

/**
 * Created by 刘红亮 on 16-1-18 上午9:09.
 */
public class SilentInstall {
/**
 * 执行具体的静默安装逻辑，需要手机ROOT。
 * @param apkPath
 *          要安装的apk文件的路径
 * @return 安装成功返回true，安装失败返回false。
 */
   public boolean install(String apkPath){
       boolean result = false;
       DataOutputStream  dataOutputStream = null;
       BufferedReader errorStream = null;

       try {
           //申请su权限
           Process process = Runtime.getRuntime().exec("su");
           dataOutputStream = new DataOutputStream(process.getOutputStream());
           //执行pm install 命令
           String command = "pm install -r "+apkPath+"\n";
           dataOutputStream.write(command.getBytes(Charset.forName("utf-8")));
           dataOutputStream.flush();
           dataOutputStream.writeBytes("exit\n");
           dataOutputStream.flush();
           process.waitFor();//在等待安装
           errorStream = new BufferedReader(new InputStreamReader(process.getErrorStream()));
           String msg= "";
           String line;
           // 读取命令的执行结果
           while ((line = errorStream.readLine()) != null) {
               msg += line;
           }
           Log.d("TAG", "install msg is " + msg);
           // 如果执行结果中包含Failure字样就认为是安装失败，否则就认为安装成功
           if (!msg.contains("Failure")) {
               result = true;
           }
       } catch (Exception e) {
           Log.e("TAG", e.getMessage(), e);
       } finally {
           try {
               if (dataOutputStream != null) {
                   dataOutputStream.close();
               }
               if (errorStream != null) {
                   errorStream.close();
               }
           } catch (IOException e) {
               Log.e("TAG", e.getMessage(), e);
           }
       }
       return result;

   }


}
